home *** CD-ROM | disk | FTP | other *** search
- #ifndef __TRAPS__
- #include <Traps.h>
- #endif
-
- #ifndef __GESTALTEQU__
- #include <GestaltEqu.h>
- #endif
-
- #ifndef __MEMORY__
- #include <Memory.h>
- #endif
-
- #ifndef __FONTS__
- #include <Fonts.h>
- #endif
-
- #ifndef __OSEVENTS__
- #include <OSEvents.h>
- #endif
-
- #ifndef __MENUS__
- #include <Menus.h>
- #endif
-
- #ifndef __OCE__
- #include <OCE.h>
- #endif
-
- #ifndef __OCESTANDARDDIRECTORY__
- #include <OCEStandardDirectory.h>
- #endif
-
- #ifndef __OCETEMPLATES__
- #include <OCETemplates.h>
- #endif
-
- #include "trapavailable.h"
- #include "AddressOMini.h"
-
- #ifndef _GestaltDispatch
- #define _GestaltDispatch _Gestalt
- #endif
-
- #define kMaxPathParts 64
- #define kLocalIDPrompt "\pPlease enter the password for your master key"
- #define kUserCancelled -1
-
- AuthIdentity gIdentity;
-
- void main(void);
- Boolean HasAOCE(void);
- OSErr AuthenticateLocal(void);
- OSErr GetRecipients(SMPRecipientDescriptorPtr *recipList);
-
-
- void main(void)
- {
- OSErr err;
- SMPRecipientDescriptorPtr recipList;
-
- if (!HasAOCE())
- ExitToShell();
-
- MaxApplZone();
- InitGraf(&qd.thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(nil);
- InitCursor();
- FlushEvents(everyEvent,0);
-
- err = AuthenticateLocal();
- if (err==noErr)
- err = GetRecipients(&recipList);
- }
-
-
- Boolean HasAOCE(void)
- {
- OSErr err;
- long response;
-
- if (!TrapAvailable(_GestaltDispatch))
- return false;
-
- err = Gestalt(gestaltOCEToolboxAttr,&response);
- if (err!=noErr)
- return false;
-
- return (response && (response << gestaltOCETBAvailable));
- }
-
-
- OSErr AuthenticateLocal(void)
- {
- OSErr err;
- SDPIdentityKind idKind;
- AuthGetLocalIdentityPB pBlock;
-
- err = AuthGetLocalIdentity((AuthParamBlockPtr)&pBlock,false);
-
- if (err!=noErr)
- err = SDPPromptForID(&gIdentity,nil,nil,kLocalIDPrompt,nil,kSDPLocalIdentityMask,&idKind,nil,0);
- else
- gIdentity = pBlock.theLocalIdentity;
-
- return err;
- }
-
-
- OSErr GetRecipients(SMPRecipientDescriptorPtr *recipList)
- {
- PackedDSSpecPtr packedReply;
- OSErr err;
- RString addressCategory;
- unsigned short numTypes;
- PackedRStringListHandle catTypes;
- RString *typeList[kMaxPathParts];
- unsigned char hState;
- Boolean gotAddress;
-
- /* display address records */
-
- OCECToRString(kDETCategoryAddressItems,smRoman,&addressCategory,kRStringMaxBytes);
- err = SDPGetCategoryTypes(&addressCategory,&catTypes);
- if (err!=noErr)
- return err;
- hState = HGetState((Handle)catTypes);
- HLock((Handle)catTypes);
- numTypes = OCEUnpackPathName(*catTypes,typeList,kMaxPathParts);
-
- gotAddress = AddressOMini(&packedReply,typeList,numTypes,gIdentity,
- kEnumDistinguishedNameMask|kEnumAliasMask|kEnumDNodeMask,"\pSend file to:");
-
- HSetState((Handle)catTypes,hState);
- if (!gotAddress)
- return kUserCancelled;
-
- if (packedReply) {
- err = SMPResolveToRecipient(packedReply,recipList,gIdentity);
- DisposPtr((Ptr)packedReply);
- }
-
- return err;
- }
-